import javax.sound.sampled.*;
import java.io.*;

public class WavConverter {
    
    public static byte[] convertWav(byte[] originalData) throws Exception {
        // 从字节数组创建AudioInputStream
        ByteArrayInputStream bais = new ByteArrayInputStream(originalData);
        AudioInputStream sourceStream = AudioSystem.getAudioInputStream(bais);
        
        // 获取原始音频格式
        AudioFormat sourceFormat = sourceStream.getFormat();
        System.out.println("原始音频格式: " + sourceFormat);
        
        // 定义目标格式: 8000Hz, 16bit, 单声道, 小端序
        AudioFormat targetFormat = new AudioFormat(
            AudioFormat.Encoding.PCM_SIGNED,
            8000,           // 采样率
            16,             // 采样位数
            1,              // 声道数
            2,              // 帧大小 (1声道 * 16bit = 2字节)
            8000,           // 帧率 (与采样率相同)
            false           // 小端序
        );
        
        // 如果已经是目标格式，直接返回
        if (sourceFormat.matches(targetFormat)) {
            System.out.println("音频已经是目标格式，无需转换");
            return originalData;
        }
        
        // 创建转换流
        AudioInputStream convertedStream = AudioSystem.getAudioInputStream(targetFormat, sourceStream);
        
        // 读取转换后的数据到字节数组
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int bytesRead;
        
        while ((bytesRead = convertedStream.read(buffer)) != -1) {
            baos.write(buffer, 0, bytesRead);
        }
        
        // 关闭流
        convertedStream.close();
        sourceStream.close();
        
        System.out.println("音频转换完成，新大小: " + baos.size() + " 字节");
        return baos.toByteArray();
    }
}
